package com.cool.shark.utils;

import cn.hutool.core.codec.Base64;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import static org.apache.tomcat.util.net.SocketEvent.TIMEOUT;

/**
 * @Name: UploadGiteeImgBed
 * @Author: 西风残叶
 * @Date: 2024/4/15 21:58
 * @Version: 1.0
 * @TODO: 上传到Gitee图床工具类
 */
@Slf4j
public class UploadGiteeImgBedUtils {
    /**
     * 码云私人令牌
     */
    private static final String ACCESS_TOKEN = "6b66ecebe732ff1349056e152ae5793f";
    /**
     * 码云个人空间名
     */
    private static final String OWNNER = "lzh5201314";
    /**
     * 码云上传到指定仓库的仓库名
     */
    private static final String REPO = "cool-shark-imgs";
    /**
     * 上传时指定轮播图的图片路径
     */
    private static final String BANNER_PATH = "banner/";
    /**
     * 上传时指定商品图片的路径
     */
    private static final String GOODS_PATH = "goods/";
    /**
     * 用于提交的描述信息
     */
    private static final String ADD_MESSAGE = "add img";
    // API

    /**
     * <p>新建(POST),获取(GET),删除(DELETE)文件:()中指的是使用对应的请求方式</p>
     * <ul>
     *     <li>%s => 仓库所属空间地址(个人的地址path) (owner)</li>
     *     <li>%s => 仓库路径(repo)</li>
     *     <li>%s => 文件的路径(path)</li>
     * </ul>
     */
    public static final String API_CREATE_BANNER_POST = "https://gitee.com/api/v5/repos/%s/%s/contents/%s";

    /**
     * 创建用于上传横幅文件的URL
     *
     * @param originalFilename 原始文件名，包含文件的扩展名
     * @return 生成的文件上传URL
     */
    public static String createBannerUploadFileUrl(String originalFilename) {
        // 获取文件扩展名
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        // 生成唯一的文件名，并附加原始文件的扩展名
        String fileName = UUID.randomUUID() + suffix;
        // 根据API模板和文件名生成最终的URL
        String url = String.format(
                API_CREATE_BANNER_POST,
                UploadGiteeImgBedUtils.OWNNER,
                UploadGiteeImgBedUtils.REPO,
                UploadGiteeImgBedUtils.BANNER_PATH + fileName);
        return url;
    }

    /**
     * 创建商品上传文件的URL。
     *
     * @param originalFilename 原始文件名，包含文件扩展名。
     * @return 生成的文件URL，该URL基于Gitee仓库中的唯一文件名。
     */
    public static String createGoodsUploadFileUrl(String originalFilename) {
        // 获取文件扩展名
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        // 生成唯一的文件名，并附加原始文件的扩展名
        String fileName = UUID.randomUUID() + suffix;
        // 根据API模板和文件名生成最终的URL
        String url = String.format(
                API_CREATE_BANNER_POST,
                UploadGiteeImgBedUtils.OWNNER,
                UploadGiteeImgBedUtils.REPO,
                UploadGiteeImgBedUtils.GOODS_PATH + fileName);
        return url;
    }

    /**
     * 生成用于上传至Gitee图片床的请求体Map
     *
     * @param multipartFile 需要上传的文件，以Byte数组形式表示
     * @return 包含上传所需信息的HashMap对象，其中包含access_token、message和content三个键值对
     */
    public static HashMap<String, Object> getUploadBodyMap(byte[] multipartFile) {
        HashMap<String, Object> bodyMap = new HashMap<>(3);
        // 初始化请求体Map，并设置access_token和message
        bodyMap.put("access_token", UploadGiteeImgBedUtils.ACCESS_TOKEN);
        bodyMap.put("message", UploadGiteeImgBedUtils.ADD_MESSAGE);
        // 将文件内容进行Base64编码，并添加至请求体Map中
        bodyMap.put("content", Base64.encode(multipartFile));
        return bodyMap;
    }



}
